package com.lechi.web.service;

import com.lechi.web.system.domain.*;
import com.lechi.web.vo.IotMonitorDataQueryVo;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

/**
 * 监测数据Service接口
 *
 * @author yangguang
 * @date 2024 -03-20
 */
public interface IIotMonitorDataService {

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合 list
     */
    List<IotMonitorDataBo> selectIotMonitorDataList(IotMonitorDataBo iotMonitorDataBo);

    List<OutBondMonitorDataBo> selectOutBoundMonitorDataList(IotMonitorDataBo iotMonitorDataBo);

    List<OutBondMonitorDataBo> selectOutBoundLatestMonitorData(IotMonitorDataBo iotMonitorDataBo);
    /**
     * 查询丢失的监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合 list
     */
    List<LocalDateTime> selectLostIotMonitorDataList(IotMonitorDataBo iotMonitorDataBo);


    /**
     * 查询导出监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合 list
     */
    IotMonitorDataBo exportIotMonitorHeader(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询导出监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合 list
     */
    List<IotMonitorDataBo> selectLatestMonitorData(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 查询导出监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合 list
     */
    List<IotMonitorDataBo> exportIotMonitorDataList(IotMonitorDataBo iotMonitorDataBo);

    /**
     * 格式化导出监测数据列表
     *
     * @param queryType the query type
     * @param map       监测数据
     * @return 监测数据集合 map
     */
    Map<String, IotSensorValue> formatTimeExportMonitorData(IotMonitorDataQueryVo queryType, Map<String, Object> map);

    /**
     * 数据分析监测数据列表
     *
     * @param map 监测数据
     * @return 监测数据集合 list
     */
    List<IotSensorValue> selectDataAnalysisData(Map<String, Object> map);

    /**
     * 查询监测数据列表
     *
     * @param iotMonitorDataBo 监测数据
     * @return 监测数据集合 iot monitor data count bo
     */
    IotMonitorDataCountBo selectIotMonitorDataCount(IotMonitorDataBo iotMonitorDataBo);

    Long selectExistsMonitorData(IotMonitorDataBo iotMonitorDataBo);


    void updateExistsMonitorData(IotMonitorDataBo iotExitsMonitorDataBo);

    /**
     * 新增监测数据
     *
     * @param tableName the table name
     * @param list      监测数据
     */
    void batchInsert(String tableName, List<IotMonitorDataBo> list);

    /**
     * 批量删除监测数据
     *
     * @param ids 需要删除的监测数据主键集合
     */
    void deleteIotMonitorDataByIds(Long[] ids);
}
